const { app, BrowserWindow, Menu, shell, ipcMain, dialog } = require('electron');
const path = require('path');

// 保持对窗口对象的全局引用
let mainWindow;

// 开发模式检测
const isDev = process.argv.includes('--dev');

function createWindow() {
    // 定义窗口尺寸
    const normalSize = { width: 1200, height: 900 };
    const minSize = { width: 300, height: 300 };
    
    // 创建浏览器窗口
    mainWindow = new BrowserWindow({
        width: normalSize.width,
        height: normalSize.height,
        minWidth: minSize.width,
        minHeight: minSize.height,
        icon: path.join(__dirname, 'assets', 'icon.png'),
        webPreferences: {
            nodeIntegration: false,
            contextIsolation: true,
            enableRemoteModule: false,
            webSecurity: true,
            preload: path.join(__dirname, 'preload.js')
        },
        titleBarStyle: 'default',
        show: false, // 先不显示，等页面加载完成后再显示
        autoHideMenuBar: !isDev, // 生产环境隐藏菜单栏
        frame: true,
        transparent: false,
        resizable: true,
        alwaysOnTop: true // 默认置顶显示
    });
    
    // 保存窗口尺寸配置到全局变量
    global.windowSizes = {
        normal: normalSize,
        min: minSize
    };

    // 加载应用的 index.html
    mainWindow.loadFile('index.html');

    // 窗口准备显示时显示窗口，防止视觉闪烁
    mainWindow.once('ready-to-show', () => {
        mainWindow.show();
        
        // 开发模式下自动打开开发者工具
        if (isDev) {
            mainWindow.webContents.openDevTools();
        }
        
        // 更新菜单中的置顶状态
        updateAlwaysOnTopMenu();
        
        // 设置置顶状态监听器
        setupAlwaysOnTopListener();
    });

    // 当窗口被关闭时发出 closed 事件
    mainWindow.on('closed', () => {
        mainWindow = null;
    });

    // 处理外部链接
    mainWindow.webContents.setWindowOpenHandler(({ url }) => {
        shell.openExternal(url);
        return { action: 'deny' };
    });

    // 防止导航到外部链接
    mainWindow.webContents.on('will-navigate', (event, url) => {
        if (url !== mainWindow.webContents.getURL()) {
            event.preventDefault();
            shell.openExternal(url);
        }
    });

    // 设置窗口标题
    mainWindow.setTitle('智能薪资计算器 v1.0.0');
}

// 创建应用菜单
function createMenu() {
    const template = [
        {
            label: '文件',
            submenu: [
                {
                    label: '重新加载',
                    accelerator: 'CmdOrCtrl+R',
                    click: () => {
                        if (mainWindow) {
                            mainWindow.reload();
                        }
                    }
                },
                {
                    type: 'separator'
                },
                {
                    label: '退出',
                    accelerator: process.platform === 'darwin' ? 'Cmd+Q' : 'Ctrl+Q',
                    click: () => {
                        app.quit();
                    }
                }
            ]
        },
        {
            label: '编辑',
            submenu: [
                { role: 'undo', label: '撤销' },
                { role: 'redo', label: '重做' },
                { type: 'separator' },
                { role: 'cut', label: '剪切' },
                { role: 'copy', label: '复制' },
                { role: 'paste', label: '粘贴' },
                { role: 'selectall', label: '全选' }
            ]
        },
        {
            label: '视图',
            submenu: [
                { role: 'reload', label: '重新加载' },
                { role: 'forceReload', label: '强制重新加载' },
                { role: 'toggleDevTools', label: '切换开发者工具' },
                { type: 'separator' },
                { role: 'resetZoom', label: '实际大小' },
                { role: 'zoomIn', label: '放大' },
                { role: 'zoomOut', label: '缩小' },
                { type: 'separator' },
                { role: 'togglefullscreen', label: '切换全屏' }
            ]
        },
        {
            label: '窗口',
            submenu: [
                { role: 'minimize', label: '最小化' },
                { type: 'separator' },
                {
                    label: '置顶显示',
                    type: 'checkbox',
                    checked: true,
                    click: () => {
                        if (mainWindow) {
                            const isAlwaysOnTop = mainWindow.isAlwaysOnTop();
                            mainWindow.setAlwaysOnTop(!isAlwaysOnTop);
                        }
                    }
                },
                { type: 'separator' },
                { role: 'close', label: '关闭' }
            ]
        },
        {
            label: '帮助',
            submenu: [
                {
                    label: '关于',
                    click: async () => {
                        await dialog.showMessageBox(mainWindow, {
                            type: 'info',
                            title: '关于智能薪资计算器',
                            message: '智能薪资计算器',
                            detail: '版本: 1.0.0\n\n一个帮助您实时追踪收入进度的桌面应用程序。\n\n功能特色：\n• 实时收入计算\n• 工作进度追踪\n• 小窗模式\n• 数据本地存储\n• 多种工作制支持\n\n© 2025 智能薪资计算器',
                            buttons: ['确定']
                        });
                    }
                }
            ]
        }
    ];

    // macOS 特殊处理
    if (process.platform === 'darwin') {
        template.unshift({
            label: app.getName(),
            submenu: [
                { role: 'about', label: '关于 ' + app.getName() },
                { type: 'separator' },
                { role: 'services', label: '服务' },
                { type: 'separator' },
                { role: 'hide', label: '隐藏 ' + app.getName() },
                { role: 'hideothers', label: '隐藏其他' },
                { role: 'unhide', label: '显示全部' },
                { type: 'separator' },
                { role: 'quit', label: '退出 ' + app.getName() }
            ]
        });

        // 窗口菜单
        template[4].submenu = [
            { role: 'close', label: '关闭' },
            { role: 'minimize', label: '最小化' },
            { role: 'zoom', label: '缩放' },
            { type: 'separator' },
            { role: 'front', label: '前置全部窗口' }
        ];
    }

    const menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
}

// 当 Electron 完成初始化并准备创建浏览器窗口时，将调用此方法
app.whenReady().then(() => {
    createWindow();
    createMenu();
    
    // 创建菜单后更新置顶状态
    updateAlwaysOnTopMenu();

    app.on('activate', () => {
        // 在 macOS 中，当点击 dock 图标且没有其他窗口打开时，
        // 重新创建窗口是很常见的
        if (BrowserWindow.getAllWindows().length === 0) {
            createWindow();
        }
    });
});

// 当所有窗口都关闭时退出应用
app.on('window-all-closed', () => {
    // 在 macOS 中，应用程序及其菜单栏通常保持活动状态，
    // 直到用户明确地使用 Cmd + Q 退出
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

// 安全设置
app.on('web-contents-created', (event, contents) => {
    contents.on('new-window', (event, navigationUrl) => {
        event.preventDefault();
        shell.openExternal(navigationUrl);
    });
});

// 设置应用用户模型ID (Windows)
if (process.platform === 'win32') {
    app.setAppUserModelId('com.smartsalarycalculator.app');
}

// 应用准备就绪时的额外设置
app.on('ready', () => {
    // 设置应用名称
    app.setName('智能薪资计算器');
    
    // 防止应用被多次启动
    const gotTheLock = app.requestSingleInstanceLock();
    
    if (!gotTheLock) {
        app.quit();
    } else {
        app.on('second-instance', () => {
            // 当运行第二个实例时，将焦点转移到主窗口
            if (mainWindow) {
                if (mainWindow.isMinimized()) {
                    mainWindow.restore();
                }
                mainWindow.focus();
            }
        });
    }
});

// IPC 通信处理 (如果需要与渲染进程通信)
ipcMain.handle('app-version', () => {
    return app.getVersion();
});

ipcMain.handle('app-path', () => {
    return app.getAppPath();
});

// 窗口控制IPC处理器
ipcMain.handle('resize-window-to-min', () => {
    if (mainWindow && global.windowSizes) {
        const { min } = global.windowSizes;
        mainWindow.setSize(min.width, min.height);
        mainWindow.center(); // 居中显示
    }
    return true;
});

ipcMain.handle('resize-window-to-normal', () => {
    if (mainWindow && global.windowSizes) {
        const { normal } = global.windowSizes;
        mainWindow.setSize(normal.width, normal.height);
        mainWindow.center(); // 居中显示
    }
    return true;
});

// 优雅关闭
app.on('before-quit', (event) => {
    if (mainWindow) {
        // 这里可以添加保存数据的逻辑
        console.log('应用即将退出，正在保存数据...');
    }
});

// 更新菜单中的置顶状态
function updateAlwaysOnTopMenu() {
    if (mainWindow) {
        const menu = Menu.getApplicationMenu();
        if (menu) {
            // 查找窗口菜单中的置顶选项
            const windowMenu = menu.items.find(item => item.label === '窗口');
            if (windowMenu && windowMenu.submenu) {
                const alwaysOnTopItem = windowMenu.submenu.items.find(item => item.label === '置顶显示');
                if (alwaysOnTopItem) {
                    alwaysOnTopItem.checked = mainWindow.isAlwaysOnTop();
                }
            }
        }
    }
}

// 监听置顶状态变化
function setupAlwaysOnTopListener() {
    if (mainWindow) {
        mainWindow.on('always-on-top-changed', (event, isAlwaysOnTop) => {
            updateAlwaysOnTopMenu();
        });
    }
}
